<?php
/**
 * An interface for OpenID extensions.
 *
 * @package OpenID
 */

/**
 * Require the Message implementation.
 */
require_once 'Auth/OpenID/Message.php';

/**
 * A base class for accessing extension request and response data for
 * the OpenID 2 protocol.
 *
 * @package OpenID
 */
class Auth_OpenID_Extension {
  /**
   * ns_uri: The namespace to which to add the arguments for this
   * extension
   */
  var $ns_uri = null;
  var $ns_alias = null;

  /**
   * Get the string arguments that should be added to an OpenID
   * message for this extension.
   */
  function getExtensionArgs() {
    return null;
  }

  /**
   * Add the arguments from this extension to the provided message.
   *
   * Returns the message with the extension arguments added.
   */
  function toMessage(&$message) {
    $implicit = $message->isOpenID1();
    $added = $message->namespaces->addAlias($this->ns_uri, $this->ns_alias, $implicit);
    
    if ($added === null) {
      if ($message->namespaces->getAlias($this->ns_uri) != $this->ns_alias) {
        return null;
      }
    }
    
    $message->updateArgs($this->ns_uri, $this->getExtensionArgs());
    return $message;
  }
}
